from user.User import User
from bank.Bank import Bank

class AccountBusiness:
    def __init__(self, bank: Bank):                                         # 类型注解声明bank应为Bank实例
        self.bank = bank

    def open_account(self, user_info):            # 开户模块
        user = User()                                                       # 实例化不必多说
        user.set_info(*user_info)                                           # *user_info 将 user_info 可迭代对象中的元素解包为位置参数，并传递给 set_info 方法。
        status, account = self.bank.add_user(user)                          # 赋值状态码和随机生成账号
        return status, account

    def deposit(self, account, amount):           # 存款模块
        user = self.bank.users.get(account)                                 # 取得输入account的user值，如果不存在，user 为None
        if not user:                                                        # 防御性编程模式(Python 会将 None 自动转换为布尔值 False，因此 not user 等价于 not False)
                                                                            # 如果user为真值则为 if not true ,条件不成立也不会执行，if not true 这条语句永远不会执行
            return False
        user.balance += int(amount)                                         # user.balance为所输入账号的存款值，将用户输入的存款金额（amount）强转为int类型存入
        return True

    def withdraw(self, account, password, amount): # 取钱模块
        user = self.bank.users.get(account)                                 # # 取得输入account的user值，如果不存在，user 为None
        if not user:
            return 1  # 账号不存在
        if user.password != int(password):
            return 2  # 密码不对
        if user.balance < int(amount):
            return 3  # 钱不够
        user.balance -= int(amount)
        return 0  # 正常                                                     # 预存款模块类似，稍作修改

    def transfer(self, from_account, to_account, password, amount): # 转账模块  （参数：转出账户，转入账户，转出账户密码，转账金额）
        # ）
        from_user = self.bank.users.get(from_account)
        to_user = self.bank.users.get(to_account)
        if not from_user or not to_user:                                     # 判断转入账户和转出账户正确性
            return 1  # 账号不对
        if from_user.password != int(password):                              # 判断转出账户密码正确性
            return 2  # 密码不对
        if from_user.balance < int(amount):                                  # 余额是否支持输入的转账金额
            return 3  # 钱不够
        from_user.balance -= int(amount)                                     # 正常扣款
        to_user.balance += int(amount)                                       # 正常入款
        return 0  # 正常

    def query_account(self, account, password):  # 查询模块
        user = self.bank.users.get(account)
        if not user:
            print("该用户不存在")
            return
        if user.password != int(password):
            print("密码错误")
            return
        print(f"当前账号：{user.account}, 余额：{user.balance}元, 用户居住地址：{user.address}, 当前账户的开户行：{user.bank_name}")
